package com.xmy.aboutexception;
//异常抛出 throws 和 throw 自定义异常

public class Demo2 {
    public static void main(String[] args) {
        System.out.println(getIntOne());
        System.out.println(getIntTwo());

        try {
            test();
        } catch (MyException e) {
            System.out.println("catch MyException");
            e.printStackTrace();
        }
    }

    public static void test() throws MyException {
        try {
            int i = 10 / 0;
        } catch (ArithmeticException e) {
            System.out.println("exception in test");
            throw new MyException("This is MyException");
        } finally {
            System.out.println("finally in test");
        }

    }

    // 注意最后一个 return 的位置
    public static int getIntOne() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;
            /*
             * return a 在程序执行到这一步的时候，这里不是return a 而是 return 30；这个返回路径就形成了
             * 但是呢，它发现后面还有finally，所以继续执行finally的内容，a=40
             * 再次回到以前的路径,继续走return 30，形成返回路径之后，这里的a就不是a变量了，而是常量30
             */
        } finally {
            a = 40;
        }
        return a;
    }

    public static int getIntTwo() {
        int a = 10;
        try {
            System.out.println(a / 0);
            a = 20;
        } catch (ArithmeticException e) {
            a = 30;
            return a;
        } finally {
            a = 40;
            //如果这样，就又重新形成了一条返回路径，由于只能通过1个return返回，所以这里直接返回40
            return a;
        }

    }

}

class MyException extends Exception {
    public MyException() {
    }

    public MyException(String message) {
        super(message);
    }
}